package org.cis.jproyinv.seguridad.dao;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.NoResultException;
import org.cis.jproyinv.dao.ServicioDao;
import org.cis.jproyinv.seguridad.modelo.Rol;
import org.cis.jproyinv.seguridad.modelo.Usuario;

public class UsuarioDao extends ServicioDao<Usuario, Long> {

    @Override
    public Usuario buscar(Long id) {
        return getEm().find(Usuario.class, id);
    }

    @Override
    public List<Usuario> buscarTodos() {
        return getEm().createQuery("select us from Usuario us").getResultList();
    }

    public List<Usuario> buscarCriterio(String criterio) {
        List<Usuario> resultadoBusqueda = new ArrayList();
        try {
            resultadoBusqueda.add((Usuario) getEm().createQuery("select usu from Usuario usu where usu.numeroDocumentoIdentificacion ='" + criterio + "'").getSingleResult());
        } catch (NoResultException e) {
        }
        resultadoBusqueda.addAll(getEm().createQuery("select usu from Usuario usu where usu.nombres like '%" + criterio + "%' or usu.apellidos like '%" + criterio + "%'").getResultList());
        return resultadoBusqueda;
    }

    public Rol buscarRoles(long id) {
        return this.buscar(id).getRol();
    }

    public boolean existeUsuario(String nick, String contraseña) {
        boolean existeUsuario = false;
        if (getEm().createQuery("select us from Usuario us where us.nick='" + nick + "'").getResultList().isEmpty() == false) {
            existeUsuario = true;
        }
        return existeUsuario;
    }

    public List<Rol> roles() {
        return getEm().createQuery("select ro from Rol ro").getResultList();
    }

    public List<Usuario> disponibilidad(String criterio) {
        return getEm().createQuery("select usu from Usuario usu where usu.nick like '%" + criterio + "%'").getResultList();
    }
}
